home *** CD-ROM | disk | FTP | other *** search
- UNIT Knapper;
- {$O+,F+}
-
- INTERFACE
-
- CONST INNE=TRUE; UTE=FALSE; { Er knappen presset INN eller UT }
-
- TYPE Knapp=OBJECT
- Xa,Xb,Y,Fg,Bg:BYTE; Title:STRING; Paa:BOOLEAN;
- PROCEDURE Fjern;
- PROCEDURE Tegn(B:BOOLEAN);
- PROCEDURE Init(X1,X2,Yp,Dv,Ev:BYTE; Fv:STRING);
- FUNCTION Trykket:BOOLEAN;
- FUNCTION Byttet:BOOLEAN;
- END;
-
- VAR KnappDefPaa:BOOLEAN; { Skal knappen være inne eller ute som def }
- Stopp,Beskt,Shell:KNAPP;
-
- IMPLEMENTATION
-
- USES OGWare;
-
- VAR Hl,Sd:ARRAY[0..15] OF BYTE;
-
- PROCEDURE Knapp.Fjern;
- VAR C,T,U:BYTE; D:WORD;
- BEGIN
- C:=Bg*17; D:=Y*80-81;
- FOR T:=Xa TO Xb DO FOR U:=0 TO 2 DO MemW[$B800:(T+D+U*80)*2]:=32+C*256;
- END;
-
- PROCEDURE Knapp.Tegn(B:BOOLEAN);
- VAR T,C,Ov,Nh:BYTE; U:WORD;
- BEGIN
- MouseSave;
- C:=Bg*17; U:=Y*80-81;
- IF B=INNE THEN BEGIN Ov:=Sd[Bg]+Bg*16; Nh:=Hl[Bg]+Bg*16; END
- ELSE BEGIN Ov:=Hl[Bg]+Bg*16; Nh:=Sd[Bg]+Bg*16; END;
- FOR T:=Xa+1 TO Xb-1 DO
- BEGIN
- MemW[$B800:(T+U)*2 ]:=196+Ov*256;
- MemW[$B800:(T+U)*2+160]:= 32+C *256;
- MemW[$B800:(T+U)*2+320]:=196+Nh*256;
- END;
- MemW[$B800:(Xa+U)*2 ]:=218+Ov*256; MemW[$B800:(Xb+U)*2 ]:=191+Nh*256;
- MemW[$B800:(Xa+U)*2+160]:=179+Ov*256; MemW[$B800:(Xb+U)*2+160]:=179+Nh*256;
- MemW[$B800:(Xa+U)*2+320]:=192+Ov*256; MemW[$B800:(Xb+U)*2+320]:=217+Nh*256;
- IF B THEN C:=Sd[Bg]+Bg*16 ELSE C:=Fg+Bg*16;
- Title:=COPY(Title,1,(Xb-Xa-1));
- U:=Y*80-1+(Xb-Xa-1-LENGTH(Title)) DIV 2;
- FOR T:=1 TO LENGTH(Title) DO
- BEGIN MemW[$B800:(Xa+T+U)*2]:=ORD(Title[T])+C*256; END;
- MouseLoad;
- END;
-
- PROCEDURE Knapp.Init(X1,X2,Yp,Dv,Ev:BYTE; Fv:STRING);
- BEGIN
- Xa:=X1; Xb:=X2; Y:=Yp; Fg:=Dv; Bg:=Ev; Title:=Fv;
- Paa:=KnappDefPaa; Tegn(Paa);
- END;
-
- FUNCTION Knapp.Trykket:BOOLEAN;
- BEGIN
- Trykket:=FALSE;
- IF (MouseXpos>=Xa) AND (MouseXpos<=Xb) AND
- (MouseYpos>=Y) AND (MouseYpos<=Y+2) AND (MouseButton=1) THEN
- BEGIN
- Tegn(NOT Paa); Beep(200,10);
- REPEAT UNTIL MouseButton<>1;
- Beep(200,10); Tegn(Paa); Trykket:=TRUE;
- IF (MouseXpos<Xa) OR (MouseXpos>Xb) OR
- (MouseYpos<Y) OR (MouseYpos>Y+2) THEN Trykket:=FALSE;
- END;
- END;
-
- FUNCTION Knapp.Byttet:BOOLEAN;
- BEGIN
- Byttet:=FALSE;
- IF (MouseXpos>=Xa) AND (MouseXpos<=Xb) AND
- (MouseYpos>=Y) AND (MouseYpos<=Y+2) AND (MouseButton=1) THEN
- BEGIN
- Paa:=NOT Paa;
- Byttet:=TRUE;
- Tegn(Paa); Beep(200,10);
- REPEAT UNTIL MouseButton<>1;
- END;
- END;
-
- BEGIN
- Sd[00]:=08; Hl[00]:=07; Sd[01]:=00; Hl[01]:=09; Sd[02]:=00; Hl[02]:=10;
- Sd[03]:=01; Hl[03]:=11; Sd[04]:=00; Hl[04]:=12; Sd[05]:=00; Hl[05]:=13;
- Sd[06]:=00; Hl[06]:=14; Sd[07]:=08; Hl[07]:=15; Sd[08]:=00; Hl[08]:=07;
- Sd[09]:=01; Hl[09]:=03; Sd[10]:=02; Hl[10]:=11; Sd[11]:=03; Hl[11]:=15;
- Sd[12]:=04; Hl[12]:=14; Sd[13]:=05; Hl[13]:=15; Sd[14]:=06; Hl[14]:=15;
- Sd[15]:=08; Hl[15]:=07; KnappDefPaa:=UTE;
- END.